import { filter, map, Subject } from 'rxjs';

// 就是一个 subject，两个订阅者，subject 可以异步的调用 next 返回消息，订阅者可以收到这个消息。
// 相比 Promise 只能异步的返回一个值，rxjs 的 Subject 可以异步的返回任意多个值。
const stream$ = new Subject<number>();


// 变换之后会返回新的流 result$，让订阅者订阅这个新的流。
// rxjs 就这么简单，就是发布订阅、可以用 next 返回多个值，用 pipe + 操作符对值做修改
const result$ = stream$
    .pipe(map((x) => x * x))
    .pipe(filter((x) => x % 2 !== 0));

result$.subscribe((v) => {
    console.log(`订阅者1: ${v}`)
});

result$.subscribe((v) => {
    console.log(`订阅者2: ${v}`)
});

stream$.next(1);

setTimeout(() => {
    stream$.next(2);
}, 1000);

setTimeout(() => {
    stream$.next(3);
}, 2000);